plugins是Semantic Kernel的核心組成之一,主要功用是封裝能力組成,交由Kernel來運行,提升LLM應用的層面,本篇來認識 plugins。
範例採用C#程式語言,並以主控台應用程式做為示範,使用的是.net 7.0。
此外GPT模型使用的是Azure OpenAI GPT-4,事實也可以依需求改用OpenAI服務,而模型也可以改用GPT-3.5。
前面我們已經提到透過plugins可以讓LLM模型本身做不到的事,變成可行,看起來就像模型本身的能力,進而提升LLM應用的範疇,例如,我們都知道ChatGPT的訓練集只到2021年,也就是它的大腦資料並未更新,所以如果我們問它2023年的事情,那麼生成的內容,基本上就是胡扯出來的內容,因此如果能結合Bing/google Search,將可以讓ChatGPT能夠從網路搜尋新知識,而這裡的Bing/google Search就是plugin。
(來源: https://learn.microsoft.com/en-us/semantic-kernel/media/cross-platform-plugins.png )
簡單來說就像目前OpenAI ChatGPT開放給訂閱戶的Plugins功能一樣,那麼如果我們的LLM應用也想要做,又該怎麼做呢?
在Semantic Kernel裡就是plugins機制(過去稱為Skills),Semantic Kernel內建了一些開箱即用的plugins,當然開發者也可以自行撰寫Native Function的plugin。而在設計plugins時,通常是一系列能力的組成,例如可以建立一個叫做"寫手"的plugin,而這個"寫手"可以具有
plugins其實是結合了prompt engineering與程式碼。
Kernel在調用plugins時,有二種方式
在設計plugins時,為了滿足"Planner自動安排調用"的能力,所以需要用語義的方式詳細描述這個plugins的行為,包含輸入/輸出,如此一來才能讓Planner能夠從語義上理解這個plugins的行為,進而在合適的情境調用該plugins。
Planner 規劃器,會在後續系列文做說明。
( 來源:https://learn.microsoft.com/en-us/semantic-kernel/media/writer-plugin-example.png )
plugin在設計上分成二大類,分別是Semantic functions與Native functions
主要的組成是 prompt engineering,以及LLM模型的參數配置,可以想像成是與LLM模型做互動對話。所以在開發上prompt engineering會決定這個語義函數的能力。例如:
語義函數如何設計,在下一篇文章再來細部說明
{
"schema": 1,
"type": "completion",
"description": "你是一位臉書小編,依下列主題撰寫語氣可愛風格的貼文,貼文內容不超過500個字,#zh-tw",
"completion": {
"max_tokens": 1500,
"temperature": 0.6,
"top_p": 0.0,
"presence_penalty": 0.0,
"frequency_penalty": 0.0
},
"input": {
"parameters": [
{
"name": "subject",
"description": "貼文的主題",
"defaultValue": ""
}
]
}
}
主要的組成是程式碼C# 或 Python,可供Kernel調用,簡單的說就是開發者一般日常熟悉的function撰寫。因為在LLM模型的能力是有限的,例如:LLM模型並沒有讀取檔案的能力、沒有寫資料到資料庫的能力、也沒有調用API的能力,於是實務上在開發LLM應用,會有許多機會需要提供這類的Plugins
試想看看,如果要LLM模型回答今天的日期是什麼,LLM模型本身是無法回答的,所以必須有個Function可取得電腦時間,而這個Function的程式碼內容,就會是個C#的DateTime.Now。
[SKFunction, Description("Get DateTime from local")]
public DateTime GetDateTimeAsync()
{
return DateTime.now;
}
本篇內容主要帶大家認識Semantic的plugins,而這也是在開發LLM應用一定會面對的核心區域,有了對plugins的基本認識後,接下來將會對如何建立Semantic functions與Native functions做細部的教學。
嗨,我是Ian,我喜歡分享與討論,今年跟2位朋友合著了一本ChatGPT主題書,如果你是一位開發者,這本書或許會有些幫助,https://www.tenlong.com.tw/products/9786263335189
這次的鐵人賽文章也會同時發佈於個人blog,歡迎關注我的blog : https://medium.com/@ianchen_27500